# 原始绘图，箱线图，以Recipe分图，不显示离群点
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# 读取CSV文件
df = pd.read_csv('PerformanceTest_ReviseTaskLevel.csv')

# 提取所需列：工作流（Recipe）、算法（Algorithm）、执行时间（Makespan）和任务数量（TaskNumber）
data = df[['Recipe', 'TaskNumber', 'Algorithm', 'Makespan']]

# 为每个任务数量创建单独的图表
instance_numbers = data['Recipe'].unique()
        
# 设置图形样式
plt.style.use('default')
sns.set_palette("Set2")

# 为每个任务数量创建箱线图
for instance_num in sorted(instance_numbers):
    # 筛选当前任务数量的数据
    subset = data[data['Recipe'] == instance_num]
    
    # 创建图形
    plt.figure(figsize=(12, 8))
    
    # 绘制箱线图
    ax = sns.boxplot(data=subset, x='TaskNumber', y='Makespan', hue='Algorithm', showfliers=False)
    
    # 设置标题和标签
    plt.title(f'Task Number: {instance_num}', fontsize=16, fontweight='bold')
    plt.xlabel('Workflow (Recipe)', fontsize=12)
    plt.ylabel('Execution Makespan (seconds)', fontsize=12)
    
    # 添加图例
    plt.legend(title='Algorithm', bbox_to_anchor=(1.05, 1), loc='upper left')
    
    # 调整布局
    plt.tight_layout()
    
    # 显示图表
    plt.show()

# # 可选：创建一个汇总图表，显示所有任务数量的数据
# plt.figure(figsize=(15, 10))
# ax = sns.boxplot(data=data, x='Recipe', y='Makespan', hue='Algorithm')
# plt.title('Execution Makespan by Task Number and Algorithm', fontsize=16, fontweight='bold')
# plt.xlabel('Task Number', fontsize=12)
# plt.ylabel('Execution Makespan (seconds)', fontsize=12)
# plt.legend(title='Algorithm', bbox_to_anchor=(1.05, 1), loc='upper left')
# plt.tight_layout()
# plt.show()

# 打印一些统计信息
print("数据概览:")
print(f"总数据点: {len(data)}")
print(f"工作流类型: {data['TaskNumber'].unique()}")
print(f"算法类型: {data['Algorithm'].unique()}")
print(f"任务数量: {sorted(instance_numbers)}")